#include "ota_runner.h"
#include "ota_http.h"
#include <unistd.h>
#include <sys/reboot.h>

/**
 * @brief 检查是否需要更新
 *
 * @return int 0需要更新 -1不需要
 */
static int ota_runner_checkUpdate(void)
{
    Version ver;
    if (ota_http_getVersion(VERSION_URL, &ver) < 0)
    {
        return -1;
    }

    if (ver.major > VERSION_MAJOR)
    {
        return 0;
    }
    else if (ver.major == VERSION_MAJOR && ver.minor > VERSION_MINOR)
    {
        return 0;
    }
    else if (ver.major == VERSION_MAJOR && ver.minor == VERSION_MINOR && ver.patch > VERSION_PATCH)
    {
        return 0;
    }

    return -1;
}

void ota_runner_run(void)
{
    // 请求新的版本号
    while (1)
    {
        if (ota_runner_checkUpdate() < 0)
        {
            // 如果没有更新，则一星期之后重试
            sleep(7 * 24 * 60 * 60);
            continue;
        }

        // 更新
        if (ota_http_downloadFirmware(FIRMWARE_URL, FIRMWARE_DIGEST_URL, FIRMWARE_FILE) < 0)
        {
            // 如果只是下载失败，等一小时重试
            sleep(3600);
            continue;
        }

        // 重启更新
        reboot(RB_AUTOBOOT);
    }
}